/*
 * 版权所有 (C) 2018 知启蒙(ZHIQIM) 保留所有权利。
 * 
 * 欢迎到知启蒙网站（https://www.zhiqim.com）购买正版软件，知启蒙还提供许多开源框架和软件。
 * 
 * 1、本软件产品所有源代码受《中华人民共和国著作权法》和其他有关法律、法规的保护，其所有知识产权归湖南知启蒙科技有限公司所有；
 * 2、禁止复制和修改。不得复制修改、翻译或改编本软件所有源代码，或者基于本软件产品创作衍生作品；
 * 3、禁止进行逆向工程。不得对本软件的源代码进行逆向工程、反编译或试图以其他方式发现软件的源代码；
 * 4、个别授权：如需进行商业性的销售、复制、分发，包括但不限于软件销售、预装、捆绑等，必须获得知启蒙的书面授权和许可；
 * 5、保留权利：本注释未明示授权的其他一切权利仍归知启蒙所有，任何人使用其他权利时必须获得知启蒙的书面同意。
 */
package net.redxyz.repost.resource.presenter;

import net.redxyz.repost.resource.AppResp;
import net.redxyz.repost.resource.SessionUser;
import net.redxyz.repost.service.dao.UserDao;
import net.redxyz.top.TaobaoInterface;
import net.redxyz.top.TaobaoService;
import net.redxyz.top.data.vas.ArticleUserSubscribe;
import net.redxyz.top.dbo.user.User;
import net.redxyz.top.message.TaobaoAPIRequest;
import net.redxyz.top.message.TaobaoResponse;

import java.util.HashMap;
import java.util.Map;

import org.zhiqim.httpd.HttpRequest;
import org.zhiqim.httpd.context.annotation.AnIntercept;
import org.zhiqim.kernel.Global;
import org.zhiqim.kernel.annotation.AnAlias;
import org.zhiqim.kernel.logging.Logs;
import org.zhiqim.kernel.util.DateTimes;
import org.zhiqim.kernel.util.Validates;
import org.zhiqim.kernel.util.codes.Base64;

import com.xiyuan.util.json.Jsons;

/**
 * 全局Ajax请求
 */
@AnAlias("GlobalPresenter")
public class GlobalPresenter {
    /** 判断是否有短授权 */
    public static void isAuthW2(HttpRequest request) throws Exception {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser == null) {// QAP登陆超时返回状态码799
            request.setResponseResult(799, "您登录已超时，请重新登录...");
            return;
        }
        
        if (sessionUser.isAuthW2())
            request.setResponseResult("验证成功");
        else
            request.setResponseResult(702, "用户未短授权");
    }
    
    /** WEB端跳转授权页面 */
    public static void openAuthW2(HttpRequest request) throws Exception {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser != null && Validates.isNotEmpty(sessionUser.getSubNick())) {
            request.setResponseResult(702, "不支持子账号授权，请使用主账号登录");
            return;
        }
        
        request.setResponseResult(TaobaoService.getAccreditUrl());
    }
    
    /** 无线端跳转授权页面 */
    public static void openMobileAuthW2(HttpRequest request) throws Exception {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser != null && Validates.isNotEmpty(sessionUser.getSubNick())) {
            request.setResponseResult(702, "不支持子账号授权，请使用主账号登录");
            return;
        }
        
        request.setResponseResult(TaobaoService.getAccreditWapUrl());
    }
    
    /** 获取短授权时间 */
    public static void getAuthW2(HttpRequest request) throws Exception {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        request.setResponseResult("" + ((sessionUser == null) ? 0 : sessionUser.getAuthW2()));
    }
    
    /**
     * 设置登陆来源
     * @param request
     * @param from 0表示WEB端，1表示千牛PC，2表示千牛手机
     */
    @AnIntercept("chkAjax")
    public static void setFrom(HttpRequest request, int from) {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser == null) {
            request.setResponseError("您登录已超时，请重新登录后操作");
            return;
        }
        
        sessionUser.setFrom(from);
    }
    
    /** 刷新用户信息 */
    @AnIntercept("chkAjax")
    public static void doRefreshUserInfo(HttpRequest request) {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser == null)
            return;
        
        sessionUser.doRefreshUserInfo();
    }
    
    /** 刷新用户订购信息 */
    @AnIntercept("chkAjax")
    public static void doRefreshUserOrder(HttpRequest request) {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser == null)
            return;
        
        sessionUser.setUpdateData(false);
    }
    
    /**
     * 刷新用户到期时间
     * @throws Exception
     */
    @AnIntercept("chkAjax")
    public static void doRefreshExpireDay(HttpRequest request) throws Exception {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser == null) {
            request.setResponseError("您登录已超时，请重新登录后操作");
            return;
        }
        
        User user = sessionUser.getUser();
        String nick = user.getNick();
        ArticleUserSubscribe order = UserDao.getUserOrder(nick, 5);
        switch (order.getStatus())
        {
            case ArticleUserSubscribe.UNKNOWN:
            {
                request.setResponseError("查询用户订购关系失败，下次重试");
                return;
            }
            case ArticleUserSubscribe.EXPIRE:
            {
                request.setResponseError("查询用户订购关系失败，用户已到期或会话店铺不存在");
                return;
            }
            case ArticleUserSubscribe.SUCCESS:
            {// 成功
                int versionNo = order.getVersionNo();
                String endDate = order.getEndDate();
                
                user.setVersionNo(versionNo);
                user.setEndDate(endDate);
                
                UserDao.updateUserVersion(nick, versionNo, endDate);
                if (sessionUser.isPopup() && DateTimes.compareDay(endDate, DateTimes.getDateString()) > 20) {// 如果到期时间大于20天(刚续费需要关闭弹出窗口)
                    sessionUser.setClosePopup();
                }
            }
        }
        
        sessionUser.setUpdateData(true);
        
        request.setResponseResult(sessionUser.getExpireDayNum() + "");
    }
    
    /** 关闭弹出窗口 */
    @AnIntercept("chkAjax")
    public static void doClosePopup(HttpRequest request) {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser == null)
            return;
        
        sessionUser.setClosePopup();
    }
    
    /** 关闭顶部通知 */
    @AnIntercept("chkAjax")
    public static void doCloseTopNotice(HttpRequest request) {
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser == null)
            return;
        
        sessionUser.setCloseTopNotice();
    }
    
    /***
     * 提供js自定已调用 淘宝API
     * 
     * @param isHttps 是否调用 Taobao HTTPS API地址
     * @param isBase64 param 是否为Base64
     * @param method 接口方法名
     * @param param 接口参数内容
     * @throws Exception
     */
    public static void invokeTopApi(HttpRequest request) throws Exception {
        
        SessionUser session = request.getSessionUser(SessionUser.class);
        
        // boolean isHttps = request.getParameterBoolean("isHttps");
        boolean isBase64 = request.getParameterBoolean("isBase64");
        String method = request.getParameterNoFileterOnCNT("cmd");
        String paramJson = request.getParameterNoFileterOnCNT("param");
        if (isBase64)
            paramJson = Base64.decodeUTF8(paramJson);// 解析 单数 Base64
            
        TaobaoAPIRequest req = new TaobaoAPIRequest();
        req.setNick(session.getNick());
        req.setMethod(method);
        req.setSession(session == null ? null : session.getSessionId());// 默认加上当前用户session信息
        
        Map<String, Object> paramMap = Jsons.isJson(paramJson) ? Jsons.toMap(paramJson) : new HashMap<String, Object>();
        for (String key : paramMap.keySet())
            req.addParam(key, paramMap.get(key));
        
        TaobaoResponse resp = Global.get(TaobaoInterface.class).invokeTaobaoService(req);
//        if (!resp.isSuccess()) {
//            request.setResponseError(resp.getResponseText());
//            return;
//        }
        
        request.setResponseResult(resp.getResponseText());
    }
    

    
}